AWS IoT SiteWIse で大量に作ってしまったデータストリームを簡単に削除する方法
今回は小ネタです。
AWS IoT SiteWise のデータストリームを削除するとき、数が多すぎてマネジメントコンソールから削除するのが現実的ではない場合に、簡単に削除する方法についてご紹介します。
背景
前回の記事のように OPC UA シミュレーターを使うとき、シミュレーターが多くのダミーデータを生成することがあります。このとき、SiteWise 側の設定でデータのフィルタリングなどを行わずデフォルトで使うとデータストリームが大量に作成されることになります。
前回の記事で紹介した OPC UA シミュレーターでは合計で 210 個のストリームが生成されていました。
210 個ならページ毎に全件選択して削除する操作を 11 回繰り返せば削除できますが、疲れていると作業中に寝落ちしてしまいそうです。
大量のデータストリームを簡単に削除する方法
削除方法は簡単です。AWS CLI の iotsitewise delete-time-series
コマンドをループで使えば簡単に削除できます。
具体的な手順です。
最初に、削除したいストリームの一覧を取得します。今回は /integration
で始まるストリームを削除したいので、プレフィックスに /integration
を指定します。
$ aws iotsitewise list-time-series --alias-prefix /integration |jq -r '.TimeSeriesSummaries[].alias' |head
/integration/counter/Counter_000000
/integration/random/Double_000000
/integration/counter/Counter_000004
/integration/duplicate_timestamp/DuplicateTime_000009
/integration/highspeed_strings/HighSpeedString_000024
/integration/highspeed_strings/HighSpeedString_000039
/integration/highspeed_strings/HighSpeedString_000049
/integration/highspeed_strings/HighSpeedString_000050
/integration/highspeed_strings/HighSpeedString_000055
/integration/highspeed_strings/HighSpeedString_000068
一覧が取得できていることが分かったので、これを変数に取得します。また対象となるエイリアスの数をカウントします。
$ del_list=$(aws iotsitewise list-time-series --alias-prefix /integration |jq -r '.TimeSeriesSummaries[].alias')
$ del_num_total=$(echo ${del_list} |grep -c '')
210 件全てのエイリアス名を取得できています。
$ echo ${del_num_total}
210
最後に、次のコマンドを実行します。
$ i=1
$ for a in $(echo ${del_list}); do
echo "delete $((i++))/${del_num_total}: ${a}"
aws iotsitewise delete-time-series --alias $a
done
実行すると次のような出力が 210 件表示されるので、全て削除できるまで待機します。
delete 1/210: /integration/counter/Counter_000000
delete 2/210: /integration/random/Double_000000
delete 3/210: /integration/counter/Counter_000004
delete 4/210: /integration/duplicate_timestamp/DuplicateTime_000009
delete 5/210: /integration/highspeed_strings/HighSpeedString_000024
(以下省略)
これでほぼ全て削除できますが、今回は1件だけエラーになっていました。
delete 1/1: /integration/uncertain/StatusCode{value=0x40000000,
An error occurred (ResourceNotFoundException) when calling the DeleteTimeSeries operation: dataAlias with accountId AwsAccountId{value=852697527974}, alias PropertyAlias(super=PropertyAlias{value=/integration/uncertain/StatusCode{value=0x40000000,}) not found
delete 2/1: quality=uncertain}
コンソール画面を見ると、/integration/uncertain/StatusCode{value=0x40000000, quality=uncertain}
というエイリアスがありました。
シェル上の変数には正しく入っています。
$ echo ${del_list}
/integration/uncertain/StatusCode{value=0x40000000, quality=uncertain}
しかし、エイリアスの中にカンマが入っていることでカンマの前の部分だけ削除コマンドに渡されてしまったようです。OPC サーバが利用されている現場でこういうデータモデルとなることがあるのか分かっていませんが、こういうこともあるという学びになりました。
エラーで残ったエイリアスを改めて削除して、再度ストリームの有無を確認して何も無いことを確認します。
$ aws iotsitewise list-time-series --alias-prefix /integration |jq -r '.TimeSeriesSummaries[].alias'
作業は以上となります。
最後に
データストリーム自体は残ったままでも課金は発生しないので放置していても特に困らなかったのですが、使っていないものが残り続けるのは今後使い続ける上で色々と面倒になることがあります。
サクッと削除できるならこまめに消しておきたいですね。
この記事がどなたかのお役に立てれば幸いです。